/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BD;
import Schema.*;
import main.*;

import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author qiaob
 */
public class BDClient extends BDCommun{   
    
    
 /*      Les insertions dans les tables de BD            */ 
    
    /**
     * Inserer une nouvelle client dans le BD
     *   @param c  l'object client on veut inserer dans BD
     *   @exception  si le client est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauClient(Client c){
        try {
            //Parametrer une requete
              PreparedStatement stmt = conn.prepareStatement("insert into Client(Mail,Nom,Prenom,Adresse,Pass) values (?,?,?,?,?)");
              stmt.setString(1,c.getMail());
              stmt.setString(2,c.getNom());
              stmt.setString(3,c.getPrenom());
              stmt.setString(4,c.getAdresse());
              stmt.setString(5,c.getPass());

            //Execution de requete
              int rest = stmt.executeUpdate();
              valider();
              System.out.println("Le client a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
              annuler();
        }
    }    
      
    
    /**
     * Inserer une nouvelle album dans le BD
     *   @param a  l'object album on veut inserer dans BD
     *   @exception  si le album est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauAlbum(Album a) {
        int photo=1;
        try {
            //Parametrer une requete
                PreparedStatement stmt = conn.prepareStatement("insert into Album(IdCli,Titre) values (?,?)");
                stmt.setInt(1,a.getIdCli());
                stmt.setString(2,a.getTitre());
                
            //Execution de requete
                stmt.executeUpdate();
                ResultSet rst = this.exeQuery("SELECT max(IdAlbum) FROM Album WHERE idcli="+a.getIdCli()+" and titre='"+a.getTitre()+"'");
                int idalb=-1;
	           	 if (rst.next()) {
	           		 idalb=rst.getInt(1);
	           	 }
                //Si le client veut ajouter plus de photo que le nombre de page de son album
                boolean continu=false;
                int choix2=-1;
                choix2=-1;
                choix2=LectureClavier.lireEntier("Ajouter des photos supplÃ©mentaires? oui:1, non:0 ");
	        if(choix2==0)
	            continu=true;
                while(!continu){
                         int choix=LectureClavier.lireEntier("Quelle photo voulez vous ajouter ");
                         System.out.println("Quelle est le titre de la photo ");
                         String titre=LectureClavier.lireChaine();
                         System.out.println("Commentaire pour la photo (Facultatif)");
                         String com=LectureClavier.lireChaine();
                         PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,Fid,Titrep,Commentaire) values (?,?,?,?,?)");
	                 stmt3.setInt(1,idalb);
                         stmt3.setInt(2,photo);
	                 stmt3.setInt(3,choix);
	                 stmt3.setString(4,titre);
	                 stmt3.setString(5,com);
	                 stmt3.executeQuery();
                     choix2=-1;
                     choix2=LectureClavier.lireEntier("Ajouter des photos supplÃ©mentaires? oui:1, non:0 ");
	                 if(choix2==0)
	                   	 continu=true;
                         photo++;
	           	 }
                valider();
                System.out.println("L'album a bien Ã©tÃ© ajoutÃ©");
              
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            annuler();
        }
    }
    
    /**
     * Inserer une nouvelle livre dans le BD
     *   @param l  l'object livre on veut inserer dans BD
     *   @exception  si le livre est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */    
    public void NouveauLivre(Livre l) {
        try {
        	int idalb=-1;
        	//Creation de l'album si il n'existe pas dÃ©jÃ 
            PreparedStatement stmt = conn.prepareStatement("insert into Album(IdCli,Titre) values (?,?)");
            stmt.setInt(1,l.getIdCli());
            stmt.setString(2,l.getTitre());
            
        //Execution de requete
            stmt.executeQuery();
        	
        	//On recupere l'id de l'album que l'on vient de creer car on ne le connait pas puisque l'on est en auto increment 
        	 ResultSet rst = this.exeQuery("SELECT max(IdAlbum) FROM Album WHERE idcli="+l.getIdCli()+" and titre='"+l.getTitre()+"'");
        	 if (rst.next()) {
        		 idalb=rst.getInt(1);
        		 //on crÃ©e la photo avec l'id de l'album que l'on vient de recuperer
                 PreparedStatement stmt2 = conn.prepareStatement("insert into Photo(IdAlbum,FId,TitreP) values (?,?,?)");
                 stmt2.setInt(1,idalb);
                 stmt2.setInt(2,l.getNumPhoto());
                 stmt2.setString(3,l.getTitre());
                 stmt2.executeQuery();
        	 }
        	 else{
        		 System.out.println("Erreur lors de la crÃ©ation du livre");
        		 annuler();
        	 }
             ResultSet rst1 = this.exeQuery("SELECT max(NumPhoto) FROM Photo WHERE idAlbum="+idalb+" and titrep='"+l.getTitre()+"'");
        	 int idphoto=-1;
             if (rst1.next()) {
            	 idphoto=rst1.getInt(1);
            	 PreparedStatement stmt2 = conn.prepareStatement("insert into Livre(IdAlbum,Preface,Postface,NumPhoto,NbPage) values (?,?,?,?,?)");
                 stmt2.setInt(1,idalb);
                 stmt2.setString(2,l.getPreface());
                 stmt2.setString(3,l.getPostface());
                 stmt2.setInt(4,idphoto);           
                 stmt2.setInt(5,l.getNbPage());
                 stmt2.executeQuery();
 
             }
             else{
            	 System.out.println("ProblÃšme lors de l'insertion du livre");
             	 annuler();
             }
            //Parametrer une requete
             int i=1;
             //Si le client veut ajouter plus de photo que le nombre de page de son album
             boolean continu=false;
        	 while(i<=l.getNbPage() || !continu){
        		 int choix=LectureClavier.lireEntier("Quelle photo voulez vous utiliser pour la page "+i);
        		 System.out.println("Quelle est le titre de la photo "+i);
        		 String titre=LectureClavier.lireChaine();
        		 System.out.println("Commentaire pour la photo "+i+" (Facultatif)");
        		 String com=LectureClavier.lireChaine();
        		 PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,Fid,Titrep,Commentaire) values (?,?,?,?)");
                 stmt3.setInt(1,idalb);
                 stmt3.setInt(2,choix);
                 stmt3.setString(3,titre);
                 stmt3.setString(4,com);
                 stmt3.executeQuery();
                 i++;
                 int choix2=-1;
                 if(i>l.getNbPage())
                	 choix2=LectureClavier.lireEntier("Ajouter des photos supplÃ©mentaires? oui:1, non:0 ");
                 if(choix2==0)
                	 continu=true;
        	 }
            System.out.println("Le livre a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
        	annuler();
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        valider();
    }    
    
    /**
     * Inserer une nouvelle calendrier dans le BD
     *   @param c  l'object calendrier on veut inserer dans BD
     *   @exception  si le calendrier est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauCalendrier(Calendrier c){
    	int photo=1;
        try {
        	int idalb=-1;
        	//Creation de l'album si il n'existe pas dÃ©jÃ 
            PreparedStatement stmt = conn.prepareStatement("insert into Album(IdCli,Titre) values (?,?)");
            stmt.setInt(1,c.getIdCli());
            stmt.setString(2,c.getTitre());
            
        //Execution de requete
            stmt.executeQuery();
        	
        	//On recupere l'id de l'album que l'on vient de creer car on ne le connait pas puisque l'on est en auto increment 
        	 ResultSet rst = this.exeQuery("SELECT max(IdAlbum) FROM Album WHERE idcli="+c.getIdCli()+" and titre='"+c.getTitre()+"'");
        	 if (rst.next()) {
        		 idalb=rst.getInt(1);
        		 //on crÃ©e la photo avec l'id de l'album que l'on vient de recuperer
                 PreparedStatement stmt2 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,FId,TitreP) values (?,?,?,?)");
                 stmt2.setInt(1,idalb);
                 stmt2.setInt(2,photo);
                 stmt2.setInt(3,c.getNumPhoto());
                 stmt2.setString(4,c.getTitre());
                 stmt2.executeQuery();
        	 }
        	 else{
        		 System.out.println("Erreur lors de la crÃ©ation du livre");
        		 annuler();
        	 }
            	 PreparedStatement stmt2 = conn.prepareStatement("insert into Calendrier(IdAlbum,NumPhoto,Preface) values (?,?,?)");
                 stmt2.setInt(1,idalb);
                 stmt2.setString(3,c.getPreface());
                 stmt2.setInt(2,photo);           
                 stmt2.executeQuery();
 
             
            //Parametrer une requete
             int i=1;
             //Si le client veut ajouter plus de photo que le nombre de page de son album
             //On gere manuellement l'id des photo, on l'incremente lorsque l'on a inserer la photo de couverture
             photo++;
             boolean continu=false;
        	 while(i<=12 || !continu){
        		 int choix=LectureClavier.lireEntier("Quelle photo voulez vous utiliser pour la page "+i);
        		 System.out.println("Quelle est le titre de la photo "+i);
        		 String titre=LectureClavier.lireChaine();
        		 System.out.println("Commentaire pour la photo "+i+" (Facultatif)");
        		 String com=LectureClavier.lireChaine();
        		 PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,Fid,Titrep,Commentaire) values (?,?,?,?,?)");
                         stmt3.setInt(1,idalb);
                         stmt3.setInt(2,photo);
                         stmt3.setInt(3,choix);
                         stmt3.setString(4,titre);
                         stmt3.setString(5,com);
                         stmt3.executeQuery();
                         i++;
                         int choix2=-1;
                         if(i>12)
                                 choix2=LectureClavier.lireEntier("Ajouter des photos supplÃ©mentaires? oui:1, non:0 ");
                         if(choix2==0)
                                 continu=true;
                         photo++;
        	 }
            System.out.println("Le calendrier a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
        	annuler();
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        valider();
    }    
    
    /**
     * Inserer une nouvelle agenda dans le BD
     *   @param a  l'object agenda on veut inserer dans BD
     *   @exception  si l'agenda est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauAgenda(Agenda a) {
        try {
        	int idalb=-1;
        	//Creation de l'album si il n'existe pas dÃ©jÃ 
            PreparedStatement stmt = conn.prepareStatement("insert into Album(IdCli,Titre) values (?,?)");
            stmt.setInt(1,a.getIdCli());
            stmt.setString(2,a.getTitre());
            
        //Execution de requete
            stmt.executeQuery();
        	
        	//On recupere l'id de l'album que l'on vient de creer car on ne le connait pas puisque l'on est en auto increment 
        	 ResultSet rst = this.exeQuery("SELECT max(IdAlbum) FROM Album WHERE idcli="+a.getIdCli()+" and titre='"+a.getTitre()+"'");
        	 if (rst.next()) {
        		 idalb=rst.getInt(1);
            	 PreparedStatement stmt2 = conn.prepareStatement("insert into Agenda(IdAlbum) values (?)");
                 stmt2.setInt(1,idalb);
                 stmt2.executeQuery();
        	 }
        	 else{
        		 System.out.println("Erreur lors de la crÃ©ation de l'agenda");
        		 annuler();
        	 }
        	 for(int i=1;i<53;i++){
        		 int choix=LectureClavier.lireEntier("Quelle photo voulez vous utiliser pour la page"+i);
        		 System.out.println("Quelle est le titre de la photo "+i);
        		 String titre=LectureClavier.lireChaine();
        		 System.out.println("Commentaire pour la photo "+i+" (Facultatif)");
        		 String com=LectureClavier.lireChaine();
        		 PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,Fid,Titrep,Commentaire) values (?,?,?,?,?)");
                         stmt3.setInt(1,idalb);
                         stmt3.setInt(2,i);
                         stmt3.setInt(3,choix);
                         stmt3.setString(4,titre);
                         stmt3.setString(5,com);
                         stmt3.executeQuery();
        		 
        	 }
            //Parametrer une requete
            
            System.out.println("L'agenda a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
        	annuler();
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        valider();
    }    
    
    /**
     * Inserer une nouvelle Fichier dans le BD
     *   @param f  l'object Fichier on veut inserer dans BD
     *   @exception  si le Fichier est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */    
    public void NouveauFichier(Fichier f) {
        try {
            //Parametrer une requete
                PreparedStatement stmt = conn.prepareStatement("insert into Fichier(Chemin, IdCli,InfoPriseVue,Resolution,partage) values (?,?,?,?,?)");
                stmt.setString(1,f.getChemin());
                stmt.setInt(2,f.getIdCli());
                stmt.setString(3,f.getInfoPriseVue());
                stmt.setInt(4,f.getResolution());
                stmt.setString(5,f.getPartage());
                       
            //Execution de requete
                int rest = stmt.executeUpdate();
                this.valider();
                System.out.println("Le fichier a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
        }
    
    }
    
    /**
     * Inserer une nouvelle photo dans le BD
     *   @param p  l'object photo on veut inserer dans BD
     *   @exception  si la photo est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauPhoto(Photo p) {
        try {
            //Parametrer une requete
            
                int photo=-1;
                ResultSet rst = this.exeQuery("SELECT max(numphoto) from Photo WHERE IdAlbum="+p.getIdAlbum());
                if (rst.next()) {
                    photo=rst.getInt(1);
                    photo++;
                }
                PreparedStatement stmt = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,FId,TitreP,Commentaire) values (?,?,?,?,?)");
                stmt.setInt(1,p.getIdAlbum());
                stmt.setInt(2,photo);
                stmt.setInt(3,p.getFid());
                stmt.setString(4,p.getTitreP());
                stmt.setString(5,p.getCommentaire());
                
            //Execution de requete
                int rest = stmt.executeUpdate();
                this.valider();
                System.out.println("La photo a bien Ã©tÃ© ajoutÃ©");
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
        }
    }
    
    /**
     * Inserer une nouvelle article dans le BD
     *   @param a  l'object article on veut inserer dans BD
     *   @exception  si l'article est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return a   si l'article est bien insere, sinon null   
     */
    public Article NouveauArticle(Article a){
        try {
            //Parametrer une requete
            PreparedStatement stmt = conn.prepareStatement("insert into Article(IdCommande,IdAlbum,IdFormat,IdLivraison,Quantite,PrixUnitaire) values (?,?,?,?,?,?)");
            stmt.setInt(1,a.getIdCommande());
            stmt.setInt(2,a.getIdAlbum());
            stmt.setInt(3,a.getIdFormat());
            stmt.setInt(4,a.getQuantite());
            stmt.setDouble(5,a.getPrixUnitaire());
            
        //Execution de requete
            int rest = stmt.executeUpdate();
            this.valider();
            System.out.println("L'article a bien Ã©tÃ© ajoutÃ©");
            return a;
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
            return null;
        }
    
    }
    
    /**
     * Inserer une nouvelle livraison dans le BD
     *   @param l  l'object livraison on veut inserer dans BD
     *   @exception  si la livraison est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return   l avec la cle d'insertion ou null     
     */
    public Livraison NouveauLivraison(Livraison l) {
        try {
            //Parametrer une requete
             PreparedStatement stmt = conn.prepareStatement("insert into Livraison(DateLiv,statutLiv) values (?,?)",Statement.RETURN_GENERATED_KEYS);
             stmt.setDate(1,(Date)l.getDateLiv());
             stmt.setString(2,l.getStatutLiv());
             
         //Execution de requete
             int rest = stmt.executeUpdate();
         ResultSet rs=stmt.getGeneratedKeys();
         if(rs.next())
         {
           l.setIdLivraison(rs.getInt(1));
         }    
             this.valider();
             System.out.println("La livraison a bien Ã©tÃ© ajoutÃ©");
             return l;
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
            return null;
        }
    }
    
    /**
     * Inserer une nouvelle commande dans le BD
     *   @param c  l'object commande on veut inserer dans BD
     *   @exception  si le commande est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return   c   si la commande c est bien insere dans la BD . sinon null
     */
    public Commande NouveauCommande(Commande c) {
        try {
            //Parametrer une requete
         PreparedStatement stmt = conn.prepareStatement("insert into Commande(IdCli,DateCom,PrixTotal,statutCom) values (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
         stmt.setInt(1,c.getIdCli());
         stmt.setDate(2,(Date)c.getDateCom());
         stmt.setDouble(3,c.getPrixTotal());
         stmt.setString(4,c.getStatutCom());
         
     //Execution de requete
         int rest = stmt.executeUpdate();
         ResultSet rs=stmt.getGeneratedKeys();
         if(rs.next())
         {
           c.setIdCommande(rs.getInt(1));
         }    
         this.valider();
         System.out.println("La commande a bien Ã©tÃ© ajoutÃ©e");
         return c;

        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
            return null;
        }
    }    
    
    
/*       Les selections dans les tables de BD             */
    
    /**
     * Select une fichier  depuis le BD
     *   @param Fid   l'identite du fichier qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Fichier  une instance de Fichier     
     */
    public Fichier getFichier(int Fid){
        try {
            ResultSet rst= this.exeQuery("SELECT Chemin,IdCli,InfoPriseVue,Resolution,partage FROM Fichier WHERE FId = " +Fid);
            if(rst.next()){
             Fichier tmp =new Fichier(Fid,rst.getString("Chemin"),rst.getInt("IdCli"),rst.getString("InfoPriseVue"),rst.getInt("Resolution"),rst.getString("Partage"));
            return tmp;        
            }
            else
            {
            return null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
     /**
     * Select un album  depuis le BD
     *   @param IdAlbum   l'identite de l'album qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Album  une instance de Album     
     */
    public Album getAlbum(int IdAlbum) {
        try {
            ResultSet rst= this.exeQuery("SELECT IdCli,Titre FROM Album WHERE IdAlbum = " +IdAlbum);
            if(!rst.wasNull()){
             Album tmp =new Album(IdAlbum,rst.getInt("IdCli"),rst.getString("Titre"));
            return tmp;        
            }
            else
            {
            return null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    
    }
     /**
     * Select une photo  depuis le BD
     *   @param IdAlbum   l'identite de l'album qu'on veut consulter dans BD
     *   @param NumPhoto  le numero de la photo precise
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Photo  une instance de Photo     
     */
    public Photo getPhoto(int IdAlbum, int NumPhoto) throws SQLException{
        ResultSet rst= this.exeQuery("SELECT FId,TitreP,Commentaire FROM Photo WHERE  IdAlbum="+IdAlbum+" AND NumPhoto="+NumPhoto);
        if(rst.next()){
         Photo tmp =new Photo(NumPhoto,IdAlbum,rst.getInt("Fid"),rst.getString("TitreP"),rst.getString("Commentaire"));
        return tmp;        
        }
        else
        {
           System.out.println("La photo n'existe pas");
        return null;
        }     
    }
    /**
     * Select un livre  depuis le BD
     *   @param IdAlbum   l'identite de l'album qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Livre  une instance de Livre     
     */
    public Livre getLivre(int IdAlbum) throws SQLException{
    ResultSet rst= this.exeQuery("SELECT Preface,Postface,NumPhoto,nbPage FROM Livre WHERE  IdAlbum= " +IdAlbum );
     Album tmpAlm=this.getAlbum(IdAlbum);  
        if((!rst.wasNull()) && (tmpAlm!=null)){         
        Livre tmp =new Livre(IdAlbum,tmpAlm.getIdCli(),tmpAlm.getTitre(),rst.getString("Preface"),rst.getString("Postface"),rst.getInt("NumPhoto"),rst.getInt("nbPage"));
        return tmp;        
        }
        else
        {
        return null;
        }   
    
    }
    /**
     * Select un calendrier  depuis le BD
     *   @param IdAlbum   l'identite de l'album qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Calendrier  une instance de Calendrier     
     */
    public Calendrier getCalendrier(int IdAlbum) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT NumPhoto,Preface FROM Calendrier WHERE  IdAlbum= " + IdAlbum);
        Album tmpAlm = this.getAlbum(IdAlbum);
        if ((!rst.wasNull()) && (tmpAlm != null)) {
            Calendrier tmp = new Calendrier(IdAlbum, tmpAlm.getIdCli(), tmpAlm.getTitre(),rst.getInt("NumPhoto"),rst.getString("Preface"));
            return tmp;
        } else {
            return null;
        }
    }
    /**
     * Select un  agenda  depuis le BD
     *   @param IdAlbum   l'identite de l'album qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Agenda  une instance de Agenda     
     */
    public Agenda getAgenda(int IdAlbum) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT * FROM Livre WHERE  IdAlbum= " + IdAlbum);
        Album tmpAlm = this.getAlbum(IdAlbum);
        if ((!rst.wasNull()) && (tmpAlm != null)) {
            Agenda tmp = new Agenda(IdAlbum, tmpAlm.getIdCli(), tmpAlm.getTitre());
            return tmp;
        } else {
            return null;
        }

    }
    
    /**
     * Select une commande  depuis le BD
     *   @param IdCommande   l'identite de la commande qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Commande  une instance de Commande     
     */
    public Commande getCommande(int IdCommande) throws SQLException{
        ResultSet rst= this.exeQuery("SELECT IdCli,DateCom,PrixTotal,statutCom FROM Commande WHERE IdCommande = " +IdCommande);
        if(rst.next()){
        Commande tmp =new Commande(IdCommande,rst.getInt("IdCli"),rst.getDate("DateCom"),rst.getDouble("PrixTotal"),rst.getString("statutCom"));
        return tmp;        
        }
        else
        {
        return null;
        }    
    
    }
    /**
     * Select un article  depuis le BD
     *   @param IdCommande   l'identite de la commande qu'on veut consulter dans BD
     *   @param IdAlbum  l'identite de l'album
     *   @param IdFormat l'identite de la format 
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Article  une instance de Article     
     */
    public Article getArticle(int IdCommande,int IdAlbum,int IdFormat) throws SQLException{
        ResultSet rst= this.exeQuery("SELECT IdLivraison,Quantite,PrixUnitaire FROM Article WHERE IdCommande = " +IdCommande +"AND IdAlbum="+IdAlbum+"AND IdFormat="+IdFormat);
        if(!rst.wasNull()){
        Article tmp =new Article(IdCommande,IdAlbum,IdFormat,rst.getInt("IdLivraison"),rst.getInt("Quantite"),rst.getDouble("PrixUnitaire"));
        return tmp;        
        }
        else
        {
        return null;
        }    
    
    
    }
    
    public Client getClient(int cli) {
        try {
            ResultSet rst= this.exeQuery("SELECT * FROM Client WHERE IdCli="+cli);
            if(rst.next()){
            Client tmp =new Client(cli,rst.getString("Mail"),rst.getString("Nom"),rst.getString("Prenom"),rst.getString("Adresse"),rst.getString("Pass"));
            return tmp;        
            }
            else
            {
            System.out.println("Aucun client n'existe pour cet identifiant");
            return null;
            }
        } catch (SQLException ex) {
            //Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    
    }   
    
    
    public void getInfoClient(Client c) {
        try {
            ResultSet rst= this.exeQuery("SELECT * FROM Client WHERE IdCli="+c.getIdCli());
            if(rst.next()){
                System.out.println("Identifiant: "+rst.getInt("IdCli")+", Nom: "+rst.getString("Nom")+", Prenom: "+rst.getString("Prenom")+", Mail: "+rst.getString("Mail")+", Adresse: "+rst.getString("Adresse")+", Pass: "+rst.getString("Pass"));
            }
            else
            {
                System.out.println("Aucun client n'existe pour cet identifiant");
            }
        } catch (SQLException ex) {
            //Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }   
    
    public void getFormat() {
        try {
            ResultSet rst= this.exeQuery("SELECT * FROM Format");
            if(rst.next()){
                System.out.println("Id: "+rst.getInt(1)+", Libellé: "+rst.getString(2)+", PrixUnitaire: "+rst.getInt(3)+", Resolution minimale: "+rst.getInt(4)+", Vitesse: "+rst.getInt(5)+", Stock: "+rst.getString(6));
                while(rst.next()){
                System.out.println("Id: "+rst.getInt(1)+", Libellé: "+rst.getString(2)+", PrixUnitaire: "+rst.getInt(3)+", Resolution minimale: "+rst.getInt(4)+", Vitesse: "+rst.getInt(5)+", Stock: "+rst.getString(6));
                }
              }
            else
            {
                System.out.println("Aucun format disponible");
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    } 
    /**
     * Select une livraison  depuis le BD
     *   @param IdLivraison   l'identite de la livraison qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  Livraison  une instance de Livraison     
     */
    public Livraison getLivraison(int IdLivraison) throws SQLException{
                ResultSet rst= this.exeQuery("SELECT DateLiv,statutLiv FROM Article WHERE IdLivraison = "+IdLivraison);
        if(!rst.wasNull()){
        Livraison tmp =new Livraison(IdLivraison,rst.getDate("DateLiv"),rst.getString("statutLiv"));
        return tmp;        
        }
        else
        {
        return null;
        }   
    
    }     
    /**
     * Select des albums d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des albums d'un client donne     
     */
    public void getAlbumsClient(Client c)  {
        try {
            ResultSet rst = this.exeQuery("SELECT IdAlbum,Titre,IdCli FROM Album WHERE IdCli="+c.getIdCli());
            if (rst.next()) {
                System.out.println("Id Album: "+rst.getInt("IdAlbum")+", Titre:"+rst.getString("Titre")+", Client: "+c.getIdCli());
                while (rst.next()) {
                    System.out.println("Id Album: "+rst.getInt("IdAlbum")+", Titre:"+rst.getString("Titre")+", Client: "+c.getIdCli());
                }

            } else {
                System.out.println("Aucun album pour ce client");
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Select des livres d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des livres d'un client donne     
     */
        public ArrayList getLivresClient(Client c) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT Livre.IdAlbum,Album.Titre,Livre.Preface,Livre.Postface,Livre.NumPhoto,Livre.nbPage FROM Album,Livre WHERE Album.IdAlbum=Livre.IdAlbum AND Album.IdCli =" + c.getIdCli());
        if (!rst.wasNull()) {
            ArrayList tmp = new ArrayList();
            while (rst.next()) {
                 Livre lvr =new Livre(rst.getInt("IdAlbum"),c.getIdCli(),rst.getString("Titre"),rst.getString("Preface"),rst.getString("Postface"),rst.getInt("NumPhoto"),rst.getInt("nbPage"));
                tmp.add(lvr);
            }

            return tmp;
        } else {
            return null;
        }
    }

    /**
     * Select des calendrier d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des calendriers d'un client donne     
     */    
    public void getCalendriersClient(Client c) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT Calendrier.IdAlbum,Calendrier.NumPhoto,Preface,IdCli FROM Calendrier,Album WHERE Album.IdCli="+c.getIdCli()+" and Calendrier.IdAlbum=Album.IdAlbum");
        if (rst.next()) {
            System.out.println("Identifiant Calendrier: "+rst.getInt("IdAlbum")+", Client: "+rst.getInt("IdCli")+", Photo: "+rst.getInt("NumPhoto")+", Preface: "+rst.getString("Preface"));
            while (rst.next()) {
                System.out.println("Identifiant Calendrier: "+rst.getInt("IdAlbum")+", Client: "+rst.getInt("IdCli")+", Photo: "+rst.getInt("NumPhoto")+", Preface: "+rst.getString("Preface"));
            }

        } else {
            System.out.println("Aucun calendrier pour ce client");
        }
    }
    /**
     * Select des agendas d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des agendas d'un client donne     
     */
        public void getAgendasClient(Client c) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT Agenda.IdAlbum,IdCli FROM Agenda,Album WHERE IdCli="+c.getIdCli()+" and Agenda.IdAlbum=Album.IdAlbum");
            if (rst.next()) {
                System.out.println("Identifiant Agenda: "+rst.getInt("IdAlbum")+", Client: "+rst.getInt("IdCli"));
                while (rst.next()) {
                    System.out.println("Identifiant Agenda: "+rst.getInt("IdAlbum")+", Client: "+rst.getInt("IdCli"));
                }

            } else {
                System.out.println("Aucun agenda pour ce client");
            }
        }
        
       public void getFichierClient(Client c) throws SQLException{
        ResultSet rst = this.exeQuery("SELECT * FROM Fichier WHERE IdCli="+c.getIdCli());
            if (rst.next()) {
                System.out.println("Id Fichier: "+rst.getInt(1)+", Chemin: "+rst.getString(2)+", Info prise de vue: "+rst.getString(4)+", Resolution: "+rst.getInt(5)+", Partage: "+rst.getString(6));
                while (rst.next()) {
                    System.out.println("Id Fichier: "+rst.getInt(1)+", Chemin: "+rst.getString(2)+", Info prise de vue: "+rst.getString(4)+", Resolution: "+rst.getInt(5)+", Partage: "+rst.getString(6));

                }

            } else {
                System.out.println("Aucun Fichier pour ce client");
            }
        }
    /**
     * Select des Code promo d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des codes promos d'un client donne     
     */
        public void getCodePromoClient(Client c)  {
        try {
            ResultSet rst = this.exeQuery("SELECT IdCode,IdCli,Reduction FROM CodePromo WHERE IdCli="+c.getIdCli());
            if (rst.next()) {
                System.out.println("Code reduction numÃÂ©ro: "+rst.getInt("IdCode")+", client: "+c.getIdCli()+", RÃÂ©duction: "+ rst.getDouble("Reduction"));
                while (rst.next()) {
                    System.out.println("Code reduction numÃÂ©ro: "+rst.getInt("IdCode")+", client: "+c.getIdCli()+", RÃÂ©duction: "+ rst.getDouble("Reduction"));
                }
            } else {
                 System.out.println("Il n'y a pas de bon de rÃÂ©duction pour ce client");
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Select des commandes d'un client donner  depuis le BD
     *   @param c   l'object  de client qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  ArrayList    les lists des commandes d'un client donne     
     */  
      public void getCommandesClient(Client c) throws SQLException{
       ResultSet rst =this.exeQuery("SELECT * FROM Commande WHERE IdCli="+c.getIdCli());
       if (rst.next()) {
           System.out.println("Id: "+rst.getInt("IdCommande")+", Client: "+c.getIdCli()+" Date: "+rst.getDate("DateCom")+", prix: "+rst.getDouble("PrixTotal")+", statut: "+rst.getString("statutCom"));
            while (rst.next()) {
                System.out.println("Id: "+rst.getInt("IdCommande")+", Client: "+c.getIdCli()+" Date: "+rst.getDate("DateCom")+", prix: "+rst.getDouble("PrixTotal")+", statut: "+rst.getString("statutCom"));
            }

        } 
        else{
            System.out.println("Pas de commande pour ce client");
        }
      
      }
      
       public void getStatutCommande(Commande c) throws SQLException{
       ResultSet rst =this.exeQuery("SELECT IdCommande,StatutCom FROM Commande WHERE IdCommande="+c.getIdCommande());
       if (rst.next()) {
           System.out.println("Id: "+rst.getInt("IdCommande")+", statut: "+rst.getString("statutCom"));
        } 
        else{
            System.out.println("Pas de commande pour ce client");
        }
      
      }
       
       
       public void getArticleCommande(Commande c) throws SQLException{
//On recupere les informations de chaque articles de la commande c
      ResultSet resultat =this.exeQuery("select Article.IdCommande, Article.IdAlbum, Album.Titre, Format.Libelle, Livraison.DateLiv, Article.Quantite, Article.PrixUnitaire from Article, Album, Format, Livraison where Article.IdCommande="+c.getIdCommande()+" and Article.IdAlbum=Album.IdAlbum and Article.IdFormat=Format.IdFormat and Article.IdLivraison=Livraison.IdLivraison");
      if (resultat.next()) {
        System.out.println("Commande: "+resultat.getString("IdCommande")+", Album numÃÂ©ro:"+resultat.getString("IdAlbum")+": "+resultat.getString("Titre")+", Format: "+resultat.getString("Libelle")+", Livraison prÃÂ©vue: "+resultat.getString("DateLiv")+", Quantite: "+resultat.getString("Quantite")+", Prix Unitaire: "+resultat.getString("PrixUnitaire"));
        while(resultat.next()) {
	//On affiche chaque article avec toutes ses informations
	System.out.println("Commande: "+resultat.getString("IdCommande")+", Album numÃÂ©ro:"+resultat.getString("IdAlbum")+": "+resultat.getString("Titre")+", Format: "+resultat.getString("Libelle")+", Livraison prÃÂ©vue: "+resultat.getString("DateLiv")+", Quantite: "+resultat.getString("Quantite")+", Prix Unitaire: "+resultat.getString("PrixUnitaire"));
      }
      }
     else{
            System.out.println("La commande demandÃÂ©e n'existe pas");
        }
     
}
     
      
  /*  Les operations des differents manipulations */
    /**
     * Inserer  commande dans la table de article
     *   @param a  l'object d'arcticle qu'on veut inserer
     *   @param c   l'object  de commande qu'on veut consulter dans BD
     *   @exception   Des erreurs genere pendant la consultation
     *   @return  vide    
     */    
       public void ajouterArticle(Article a,Commande c){
       //Parametrer une requete
           
        PreparedStatement stmt;
        try {
            PreparedStatement stmt1=conn.prepareStatement("update Format set stock=stock-? where IdFormat=?");
            
            stmt1.setInt(1, a.getQuantite());
            stmt1.setInt(2, a.getIdFormat());
            stmt1.executeUpdate();
            
            stmt = conn.prepareStatement("INSERT INTO Article(idCommande,idAlbum,idFormat,IdLivraison,Quantite) VALUES(?,?,?,?,?) ");
            stmt.setInt(1,c.getIdCommande());
            stmt.setInt(2,a.getIdAlbum());
            stmt.setInt(3,a.getIdFormat());
            stmt.setInt(4,a.getIdLivraison());
            stmt.setInt(5,a.getQuantite());

      //Execution de requete
        int rest = stmt.executeUpdate();    
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
             
       }
       
     /**
        *  Select  les photos partages d'un client donnee 
        *  @param  c   l'object client  donne
        *  @exception  les exceptions generes pendant la consultation
        *  @return   ArrayList   les list des photos partage d'un client donne
        */
    public ArrayList getPhotoPartageClient(Client c) throws SQLException {
        ResultSet rst = this.exeQuery("SELECT Fid,Chemin,InfoPriseVue,Resolution,partage FROM Fichier WHERE partage='O' AND IdCli = " + c.getIdCli());
        if (!rst.wasNull()) {
            ArrayList tmp = new ArrayList();
            while (rst.next()) {
                Fichier f = new Fichier(rst.getInt("Fid"), rst.getString("Chemin"), c.getIdCli(), rst.getString("InfoPriseVue"), rst.getInt("Resolution"), rst.getString("Partage"));
                tmp.add(f);
            }
            return tmp;
        } else {
            return null;
        }

    }
    /**
     *   Client se login au system avec son identifient et son mot de pass
     *   @param IdCli      Identifient d'un client
     *   @param pass       le mot de pass d'un client 
     *   @exception    les exceptions sont des erreur capture par le system
     *   @return Client   si un client peut se login , on va retourner un instance client
     */
    public Client loginClient(int IdCli, String pass) throws SQLException {

        ResultSet rst = this.exeQuery("SELECT Mail,Nom,Prenom,Adresse FROM Client WHERE IdCli = " + IdCli + "AND Pass=" + pass);
        if (!rst.wasNull()) {
            Client ct = new Client(IdCli, rst.getString("Mail"), rst.getString("Nom"), rst.getString("Prenom"), rst.getString("Adresse"),"");
            return ct;
        } else {
            return null;
        }
    }
    
    /**
     *    Modification des infors d'un photo
     *   @param p   l'instance d'objet Photo
     *   @exception   la mise a jour pose problem
     *   @return  vide    sans retour
     *      
     */
        public boolean verifId(int idalbum,String album){
        try {
            int nb=-1;
            ResultSet rs = this.exeQuery("SELECT count("+album+".IdAlbum) from Album, "+album+" WHERE "+album+".IdAlbum="+idalbum+" and "+album+".IdAlbum=Album.IdAlbum");
            if (rs.next()) {
                    nb=rs.getInt(1);    
            }
            if(nb==0){
                return false;
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        return true;
    }
        
    public void AfficheElement(int idcli,String album){
        try {
            ResultSet rs = this.exeQuery("SELECT "+album+".IdAlbum, Titre from Album, "+album+" WHERE Album.IdCli="+idcli+" and "+album+".IdAlbum=Album.IdAlbum");
            if (rs.next()) {
               System.out.println("Id "+album+":"+rs.getInt(1)+", Titre: "+rs.getString(2));
               while(rs.next()){
                   System.out.println("Id "+album+":"+rs.getInt(1)+", Titre: "+rs.getString(2));
               }   
            }
            else{
                System.out.println("Aucun "+album+" disponible");
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    
    public void modifierPhoto(Photo p){   
        try {
            //Parametrer une requete
            Statement requete = conn.createStatement();
            String sql="UPDATE Photo SET fid="+p.getFid()+",titrep="+p.getTitreP()+",commentaire"+p.getCommentaire()+"WHERE IdAlbum="+p.getIdAlbum()+"AND NumPhoto="+p.getNumPhoto();
            //Execution de requete
            int res = requete.executeUpdate(sql);
            requete.close();
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     *    Modification des infors d'un album
     *   @param a   l'instance d'objet album
     *   @exception   la mise a jour pose problem
     *   @return  vide    sans retour
     *      
     */
    public void modifierAlbum(Album a){
       try {
            //Parametrer une requete
            Statement requete = conn.createStatement();
            String sql="UPDATE Album SET IdCli="+a.getIdCli()+",Titre="+a.getTitre()+"WHERE IdAlbum="+a.getIdAlbum();
            //Execution de requete
            int res = requete.executeUpdate(sql);
            requete.close();
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }   
    
    }
    /**
     *    Modification des infors d'un livre
     *   @param l   l'instance d'objet livre
     *   @exception   la mise a jour pose problem
     *   @return  vide    sans retour
     *      
     */
    public void modifierLivre(Livre l) {
        try {
            //Parametrer une requete
            Statement requete = conn.createStatement();
            String sql = "UPDATE Livre SET Preface=" + l.getPreface() + ",Postface=" + l.getPostface() + ",NumPhoto=" + l.getNumPhoto() + ",nbPage=" + l.getNbPage() + "WHERE IdAlbum=" + l.getIdAlbum();
            //Execution de requete
            int res = requete.executeUpdate(sql);
            requete.close();
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    /**
     *    Modification des infors d'un calendrier
     *   @param c   l'instance d'objet calendrier
     *   @exception   la mise a jour pose problem
     *   @return  vide    sans retour
     *      
     */
    public void modifierCalendrier(Calendrier c) {
        try {
        	
			System.out.println("*** Choisir une action a effectuer : ***");
			System.out.println("0 : Quitter");
			System.out.println("1 : Ajouter une photo");
			System.out.println("2 : Supprimer une photo");
			System.out.println("3 : Modifier le calendrier");
			boolean exit=false;
			while(!exit) {

				int action = LectureClavier.lireEntier("Votre choix ?");
				switch(action) {
				case 0 : 	int nb=-1;
							ResultSet rs = this.exeQuery("SELECT max(numphoto) from Photo WHERE IdAlbum="+c.getIdAlbum());
							if (rs.next()) {
								nb=rs.getInt(1);
							}
							if(nb<12){
								int choix=LectureClavier.lireEntier("Il faut au moins 12 photos dans un calendrier, si vous souhaitez quand même quittez les modifications effectuées ne seront pas prisent en compte(tapez 1 pour continuer, 0 pour ajouter d'autre photos)");
							    if (choix==1){
							    	annuler();
							    }
							    else
							    	break;
							}
							valider();
							exit = true; break;

				case 1 :	int photo=-1;
			                ResultSet rst = this.exeQuery("SELECT max(numphoto) from Photo WHERE IdAlbum="+c.getIdAlbum());
			                if (rst.next()) {
			                    photo=rst.getInt(1);
			                    photo++;
			                }
							int choix=LectureClavier.lireEntier("Quelle photo voulez vous ajouter ");
                			System.out.println("Quelle est le titre de la photo ");
			                String titre=LectureClavier.lireChaine();
			                System.out.println("Commentaire pour la photo (Facultatif)");
			                String com=LectureClavier.lireChaine();
			                PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,Fid,Titrep,Commentaire) values (?,?,?,?,?)");
			                stmt3.setInt(1,c.getIdAlbum());
			                stmt3.setInt(2,photo);
			                stmt3.setInt(3,choix);
			                stmt3.setString(4,titre);
			                stmt3.setString(5,com);
			                stmt3.executeQuery();
			                break;
				
				case 2 : 	
                                       int pho=LectureClavier.lireEntier("Quelle photo voulez vous supprimer? ");
				       NumSansTrou(pho, c.getIdAlbum());
			               break;
           
				case 3: 						
						
						System.out.println("Numero de photo");
						int photo1 = LectureClavier.lireEntier("entrer votre entier");
		
		
						System.out.println("preface calendrier");
						String pref =LectureClavier.lireChaine();
						Statement requet = conn.createStatement();
						String sql = "UPDATE Calendrier SET Preface=" +pref+",NumPhoto=" +photo1+" WHERE IdAlbum="+c.getIdAlbum();
						requet.executeUpdate(sql);
						break;
				}
			}
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    
    public void modifierAgenda(Agenda c) {
        try {
        	
			System.out.println("*** Choisir une action a effectuer : ***");
			System.out.println("0 : Quitter");
			System.out.println("1 : Ajouter une photo");
			System.out.println("2 : Supprimer une photo");
			System.out.println("3 : Modifier le calendrier");
			boolean exit=false;
			while(!exit) {
				int nb=-1;
				ResultSet rs = this.exeQuery("SELECT max(numphoto) from Photo WHERE IdAlbum="+c.getIdAlbum());
				if (rs.next()) {
					nb=rs.getInt(1);
				}
				int action = LectureClavier.lireEntier("Votre choix ?"+nb+" photos actuellement");
				switch(action) {
				case 0 : 	
							if(nb!=52){
								int choix=LectureClavier.lireEntier("Il faut 52 photos dans un agenda, il y en a actuellement: "+nb+", si vous souhaitez quand même quittez les modifications effectuées ne seront pas prisent en compte(tapez 1 pour continuer, 0 pour ajouter d'autre photos)");
							    if (choix==1){
							    	annuler();
							    }
							    else
							    	break;
							}
							valider();
							exit = true; break;

				case 1 :	int photo=-1;
			                ResultSet rst = this.exeQuery("SELECT max(numphoto) from Photo WHERE IdAlbum="+c.getIdAlbum());
			                if (rst.next()) {
			                    photo=rst.getInt(1);
			                    photo++;
			                }
							int choix=LectureClavier.lireEntier("Quelle photo voulez vous ajouter ");
                			System.out.println("Quelle est le titre de la photo ");
			                String titre=LectureClavier.lireChaine();
			                System.out.println("Commentaire pour la photo (Facultatif)");
			                String com=LectureClavier.lireChaine();
			                PreparedStatement stmt3 = conn.prepareStatement("insert into Photo(IdAlbum,NumPhoto,Fid,Titrep,Commentaire) values (?,?,?,?,?)");
			                stmt3.setInt(1,c.getIdAlbum());
			                stmt3.setInt(2,photo);
			                stmt3.setInt(3,choix);
			                stmt3.setString(4,titre);
			                stmt3.setString(5,com);
			                stmt3.executeQuery();
			                break;
				
				case 2 : 	int pho=LectureClavier.lireEntier("Quelle photo voulez vous supprimer? ");
							String s1 ="Select max(NumPhoto) from Photo Where IdAlbum="+c.getIdAlbum();
			                ResultSet result = this.exeQuery(s1);
			                int maxi=-1;
			                    if (result.next()) {
			                      maxi = result.getInt(1);
			                    }
			                Statement requete = conn.createStatement();
			               //On supprime la photo que l'on souhaite retirer de l'album
			               String s = "DELETE FROM Photo WHERE IdAlbum="+c.getIdAlbum()+" and NumPhoto="+pho;
			               requete.executeQuery(s);
			               //Boucle pour qu'il n'y ait pas de trou dans la numerotation des photo dans les albums
			               int i=pho+1;
			               for(;i<=maxi;i++){
			                   PreparedStatement stmt = conn.prepareStatement("UPDATE Photo set numphoto=? where idalbum=? and numphoto=?");
			                   stmt.setInt(1,i-1);
			                   stmt.setInt(2,c.getIdAlbum());
			                   stmt.setInt(3,i);
			                   stmt.executeUpdate();
			               }			     
			               System.out.println("Photo supprimé");
			               break;
           
				case 3: 						
						System.out.println("Titre Agenda");
						String titre1=LectureClavier.lireChaine();
						Statement requet = conn.createStatement();
						String sql = "UPDATE Album SET titre="+titre1+" WHERE IdAlbum="+c.getIdAlbum();
						requet.executeUpdate(sql);
						break;
				}
			}
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    /**
     *    Modification des infors d'un fichier
     *   @param f   l'instance d'objet fichier
     *   @exception   la mise a jour pose problem
     *   @return  vide    sans retour
     *      
     */
    public void modifierFichier(Fichier f) {
        try {
            //Parametrer une requete
            Statement requete = conn.createStatement();
            String sql = "UPDATE Fichier Chemin=" + f.getChemin() + ",IdCli=" + f.getIdCli() + ",InfoPriseVue=" + f.getInfoPriseVue() + ",Resolution=" + f.getResolution() + ",partage=" + f.getPartage() + "WHERE Fid=" + f.getFid();
            //Execution de requete
            int res = requete.executeUpdate(sql);
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * supprimer une photo depuis le BD
     * @param p instance de Photo va supprimer
     * @exception les exceptions genere pendant la consultation et la suppression
     * @return String  si c'est pas reussi, si c'est fait null
     */
    public void suppressionPhoto(Photo p) throws SQLException {
        try {
        String sql = "SELECT count(*) FROM Photo p, Article art,Livraison l WHERE art.IdAlbum=p.IdAlbum AND art.IdLivraison=l.IdLivraison AND p.IdAlbum="+p.getIdAlbum()+ " AND l.statutLiv!='envoye'";
        ResultSet rst = this.exeQuery(sql);
        int res=-1;
            if (rst.next()) {
              res = rst.getInt(1);
            }
            if (res != 0) {
                System.out.println("La photo que vous souhaitez supprimÃ©e en dans un album en cours d'envoi");
                annuler();
            }
            else {
            	 //On utilise la fonction NumSansTrou pour la suppression de l'image et la renumerotation des images de l'album
                   NumSansTrou(p.getNumPhoto(), p.getIdAlbum());
             }
            System.out.println("Photo supprimé");
            valider();
            
           } catch (SQLException ex) {
            annuler();
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
       
        

    }
    
    public boolean NumSansTrou(int numphoto, int idalbum){
        try {
            String s1 ="Select max(NumPhoto) from Photo Where IdAlbum="+idalbum;
            ResultSet result = this.exeQuery(s1);
            int maxi=-1;
                if (result.next()) {
                  maxi = result.getInt(1);
                }
           Statement requete = conn.createStatement();
           //On supprime la photo que l'on souhaite retirer de l'album
           String s = "DELETE FROM Photo WHERE IdAlbum="+idalbum+" and NumPhoto="+numphoto;
           requete.executeQuery(s);
           //Boucle pour qu'il n'y ait pas de trou dans la numerotation des photo dans les albums
           int i=numphoto+1;
           for(;i<=maxi;i++){
               PreparedStatement stmt = conn.prepareStatement("UPDATE Photo set numphoto=? where idalbum=? and numphoto=?");
               stmt.setInt(1,i-1);
               stmt.setInt(2,idalbum);
               stmt.setInt(3,i);
               stmt.executeUpdate();
           }
          
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
         return true;
        
    }
 
    /**
     *   La suppression d'un album donne
     *   @param a   instance d'Album a supprimer
     *   @exception les exceptions gener pendant la suppression
     *   @return String resultat de la suppression
     */    
   public String  suppressionAlbum(Album a) throws SQLException{
       
       String sql = "SELECT count(*) FROM Album a, Article art,Livraison l WHERE art.IdAlbum=a.IdAlbum AND art.IdLivraison=l.IdLivraison AND a.IdAlbum=" + a.getIdAlbum() + "AND l.statutLiv!='envoye'";
       ResultSet rst = this.exeQuery(sql);

       if (rst.next()) {
           int res = rst.getInt(1);
           if (res != 0) {
               return "L'album que vous souhaitez supprimÃÂ© en cours d'envoi";
           } else {
               //Parametrer une requete
               Statement requete = conn.createStatement();
               String s = "DELETE FROM Album WHERE IdAlbum=" + a.getIdAlbum();

               //Execution de requete
               int rs = requete.executeUpdate(s);
               this.valider();
               return null;               
           }
       }
       return null;  
   
   }
    /**
     *   La suppression d'un livre donne
     *   @param a   instance de livre a supprimer
     *   @exception les exceptions gener pendant la suppression
     *   @return String resultat de la suppression
     */   
   public String suppressionLivre(Livre l) throws SQLException{
       String sql = "SELECT count(*) FROM Livre l, Article art,Livraison lvr WHERE art.IdAlbum=l.IdAlbum AND art.IdLivraison=lvr.IdLivraison AND l.IdAlbum=" + l.getIdAlbum() + "AND lvr.statutLiv!='envoye'";
       ResultSet rst = this.exeQuery(sql);

       if (rst.next()) {
           int res = rst.getInt(1);
           if (res != 0) {
               return "Le livre que vous souhaitez supprimÃÂ© en cours d'envoi";
           } else {
               //Parametrer une requete
               Statement requete = conn.createStatement();
               String s = "DELETE FROM Album WHERE IdAlbum=" + l.getIdAlbum();

               //Execution de requete
               int rs = requete.executeUpdate(s);
               this.valider();
               return null;
           }
       }
       return null;
   
   
   
   
   }
   
       /**
     *   La suppression d'un calendrier donne
     *   @param a   instance de calendrier a supprimer
     *   @exception   les exceptions gener pendant la suppression
     *   @return String resultat de la suppression
     */   
   public String suppressionCalendrier(Calendrier c) throws SQLException{
       String sql = "SELECT count(*) FROM Calendrier c, Article art,Livraison l WHERE art.IdAlbum=c.IdAlbum AND art.IdLivraison=l.IdLivraison AND c.IdAlbum=" + c.getIdAlbum() + "AND l.statutLiv!='envoye'";
       ResultSet rst = this.exeQuery(sql);

       if (rst.next()) {
           int res = rst.getInt(1);
           if (res != 0) {
               return "L'album que vous souhaitez supprimÃÂ© en cours d'envoi";
           } else {
               //Parametrer une requete
               Statement requete = conn.createStatement();
               String s = "DELETE FROM Album WHERE IdAlbum=" + c.getIdAlbum();

               //Execution de requete
               int rs = requete.executeUpdate(s);
               this.valider();
               return null;
           }
       }
       return null;
   
   
   
   }
 
   
public void ConsulterArticleCommande(Commande c){
        try {
            //On recupere les informations de chaque articles de la commande c
                  PreparedStatement stmt=conn.prepareStatement("select art.IdCommande, art.IdAlbum, alb.Titre, for.Libelle, liv.DateLiv, art.Quantite, art.PrixUnitaire from Article a, Album alb, Format for, Livraison liv where art.IdCommande=? and art.IdAlbum=alb.IdAlbum and art.IdFormat=for.IdFormat and art.IdLivraison=liv.IdLivraison");
                  stmt.setInt(1, c.getIdCommande());
                  ResultSet resultat= stmt.executeQuery();
                  System.out.println("");
                  while(resultat.next()) {
                    //On affiche chaque article avec toutes ses informations
                    System.out.println("Commande: "+resultat.getString("art.IdCommande")+", Album numÃÂ©ro:"+resultat.getString("art.IdAlbum")+": "+resultat.getString("alb.Titre")+", Format: "+resultat.getString("for.Libelle")+", Livraison prÃÂ©vue: "+resultat.getString("liv.DateLiv")+", Quantite: "+resultat.getString("art.Quantite")+", Prix Unitaire: "+resultat.getString("art.PrixUnitaire"));
                }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
        }
}
   
    
    
public int getNbPhotosAlbum(Album a){
        try {
            PreparedStatement stmt=conn.prepareStatement("select count(*) from Photo where IdAlbum=?");
            stmt.setInt(1, a.getIdAlbum());
            ResultSet resultat= stmt.executeQuery();
            if(resultat.next()){
                 return resultat.getInt(1);               
            }
            else{
             return 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }


}

public Format getFormat(int idFormat){
        try {
            ResultSet rst= this.exeQuery("SELECT * FROM Format WHERE IdCli="+idFormat);
                    if(rst.next()){
                    Format tmp =new Format(idFormat,rst.getString("Libelle"),rst.getDouble("PrixUnit"),rst.getInt("ResMin"),rst.getInt("vitesse"),rst.getInt("stock"));
                    return tmp;        
                    }
                    else
                    {
                    System.out.println("Aucun format n'existe pour cet identifiant");
                    return null;
                    }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }



}

public CodePromo getCodePromo(int idCodePromo){
 try {
            ResultSet rst= this.exeQuery("SELECT * FROM CodePromo WHERE IdCode="+idCodePromo);
                    if(rst.next()){
                    CodePromo tmp= new CodePromo(idCodePromo,rst.getInt("IdCli"),rst.getDouble("Reduction"));    
                    return tmp;        
                    }
                    else
                    {
                    System.out.println("Aucun code promo n'existe pour cet identifiant");
                    return null;
                    }
        } catch (SQLException ex) {
            Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }




}
   
}